package com.example.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 日志记录注解 - 用于标记需要记录日志的方法
 * 
 * 这是基于注解的AOP方式的核心：
 * 1. 更灵活：可以精确控制哪些方法需要AOP
 * 2. 更清晰：在方法上直接看到要应用的横切关注点
 * 3. 更可配置：可以通过注解参数传递配置信息
 */
@Target(ElementType.METHOD)  // 只能用在方法上
@Retention(RetentionPolicy.RUNTIME)  // 运行时保留，AOP才能读取到
public @interface Loggable {
    
    /**
     * 日志级别
     */
    String level() default "INFO";
    
    /**
     * 是否记录方法参数
     */
    boolean logArgs() default true;
    
    /**
     * 是否记录返回值
     */
    boolean logResult() default true;
    
    /**
     * 自定义日志消息
     */
    String message() default "";
} 